メインコンテンツまでスキップ

DRM-Broker 보호 템플릿 ID 마이그레이션 리서치

1. 개요

기존에 보호 템플릿 ID(Protection Template ID)를 사용하던 고객사에 SDF에 맞춰 민감도 레이블 ID(Sensitivity Label ID)로 전환하기 위한 마이그레이션 과정에 대한 리서치 문서입니다.

2. 주요 제약사항

보호 템플릿 ID를 통해 해당하는 민감도 레이블 ID를 직접 응답해주는 API는 존재하지 않습니다.

Microsoft Graph API에서 제공하는 보호 템플릿 ID → 레이블 ID 변환 API가 없기 때문에, 레이블 ID를 통한 역방향 접근 방식을 통해 마이그레이션을 수행해야 합니다.

3. 보호 템플릿 ID 조회 가능 API

  1. sensitivityLabel: evaluateApplication

    • 레이블 ID를 입력받아 해당 레이블에 적용되는 보호 템플릿 ID를 응답에 포함하여 반환합니다.
  2. sensitivityLabel: evaluateClassificationResults

    • 분류 결과를 평가하여 보호 템플릿 ID를 포함한 정보 보호 액션을 반환합니다.

4. 마이그레이션 프로세스

  1. 모든 레이블 ID 조회 및 저장 : List sensitivityLabels
  2. 각 레이블 ID에 대해 보호 템플릿 ID 추출 : sensitivityLabel: evaluateApplication
  3. 레이블 ID ↔ 보호 템플릿 ID 매핑 테이블 생성
  4. 기존 고객사 GUID와 매핑 테이블 대조하여 레이블 ID로 변환

5. API 요청/응답 예시

5.1 모든 레이블 조회 API

API

MethodURL
GET/security/informationProtection/sensitivityLabels

Base URL: https://graph.microsoft.com/beta

Request Header

NameRequiredDescription
AuthorizationrequiredAzure AD Graph API 접근 토큰
Authorization: Bearer {token}
참고: MS Azure Security365 인증 토큰 사용

Response

{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#security/informationProtection/sensitivityLabels",
"value": [
{
"id": "e1069f39-642f-44de-a08a-482d5fffb495",
"name": "shieldrmtest2",
"description": "shieldrmtest2 - POWERED BY SHIELDRM",
"color": "",
"sensitivity": 0,
"tooltip": "shieldrmtest2 - POWERED BY SHIELDRM",
"isActive": true,
"isAppliable": true,
"contentFormats": [
"file",
"email",
"site",
"unifiedgroup",
"teamwork",
"schematizeddata"
],
"hasProtection": true,
"parent@odata.context": "https://graph.microsoft.com/beta/$metadata#security/informationProtection/sensitivityLabels('e1069f39-642f-44de-a08a-482d5fffb495')/parent/$entity",
"parent": null
},
{
"id": "03ce0d3a-8336-4a7b-ad45-52c47dd71f57",
"name": "자동지정_test",
"description": "자동지정",
"color": "",
"sensitivity": 4,
"tooltip": "자동지정",
"isActive": true,
"isAppliable": true,
"contentFormats": [
"file",
"email",
"site",
"unifiedgroup",
"schematizeddata"
],
"hasProtection": true,
"parent@odata.context": "https://graph.microsoft.com/beta/$metadata#security/informationProtection/sensitivityLabels('03ce0d3a-8336-4a7b-ad45-52c47dd71f57')/parent/$entity",
"parent": null
},
{
"id": "8c98fdff-763f-4f0f-b0b9-8e43db0d8ec6",
"name": "onpremisetest",
"description": "onpremisetest - POWERED BY SHIELDRM",
"color": "",
"sensitivity": 55,
"tooltip": "onpremisetest - POWERED BY SHIELDRM",
"isActive": true,
"isAppliable": true,
"contentFormats": [
"file",
"email",
"site",
"unifiedgroup",
"teamwork"
],
"hasProtection": true,
"parent@odata.context": "https://graph.microsoft.com/beta/$metadata#security/informationProtection/sensitivityLabels('8c98fdff-763f-4f0f-b0b9-8e43db0d8ec6')/parent/$entity",
"parent": null
}
]
}

5.2 레이블 ID를 통한 보호 템플릿 ID 추출 (evaluateApplication 활용)

참고: 이 API는 보호 템플릿 ID를 직접 조회하기 위해 설계된 API는 아니지만, 응답에 포함된 protectByTemplateActiontemplateId를 통해 템플릿 ID를 조회할 수 있습니다.

API

MethodURL
POST/security/informationProtection/sensitivityLabels/evaluateApplication

Base URL: https://graph.microsoft.com/beta

Request Header

NameRequiredDescription
AuthorizationrequiredAzure AD Graph API 접근 토큰
Authorization: Bearer {token}
참고: MS Azure Security365 인증 토큰 사용
Content-Typerequiredapplication/json

Request Body

{
"contentInfo": {
"@odata.type": "#microsoft.graph.security.contentInfo",
"contentFormat": "File",
"identifier": null,
"state": "rest",
"metadata": []
},
"labelingOptions": {
"@odata.type": "#microsoft.graph.security.labelingOptions",
"labelId": "070b7e3a-bb66-47e0-8196-7d030d54190d",
"assignmentMethod": "standard",
"downgradeJustification": null,
"extendedProperties": []
}
}

Response

{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#Collection(microsoft.graph.security.informationProtectionAction)",
"value": [
{
"@odata.type": "#microsoft.graph.security.addContentHeaderAction",
"uiElementName": "MSIPCM_v1_header",
"text": "SHIELDRM",
"fontName": "Calibri",
"fontSize": 10,
"fontColor": "#000000",
"alignment": "left",
"margin": 5
},
{
"@odata.type": "#microsoft.graph.security.protectByTemplateAction",
"templateId": "d8565050-8c6e-477e-9018-6fdf53b1968b"
},
{
"@odata.type": "#microsoft.graph.security.addWatermarkAction",
"uiElementName": "MSIPCM_v1_main",
"layout": "diagonal",
"text": "SOFTCAMP",
"fontName": "Calibri",
"fontSize": 10,
"fontColor": "#000000"
},
{
"@odata.type": "#microsoft.graph.security.addContentFooterAction",
"uiElementName": "MSIPCM_v1_footer",
"text": "Protected by SHIELDRM",
"fontName": "Calibri",
"fontSize": 10,
"fontColor": "#000000",
"alignment": "left",
"margin": 5
},
{
"@odata.type": "#microsoft.graph.security.metadataAction",
"metadataToRemove": [],
"metadataToAdd": [
{
"name": "MSIP_Label_070b7e3a-bb66-47e0-8196-7d030d54190d_Enabled",
"value": "true"
},
{
"name": "MSIP_Label_070b7e3a-bb66-47e0-8196-7d030d54190d_SetDate",
"value": "2025-11-14T06:00:57Z"
},
{
"name": "MSIP_Label_070b7e3a-bb66-47e0-8196-7d030d54190d_Method",
"value": "Standard"
},
{
"name": "MSIP_Label_070b7e3a-bb66-47e0-8196-7d030d54190d_Name",
"value": "Protected by SHIELDRM"
},
{
"name": "MSIP_Label_070b7e3a-bb66-47e0-8196-7d030d54190d_SiteId",
"value": "4d615af9-1d04-4bcc-8e6f-c6b6fe3110dd"
},
{
"name": "MSIP_Label_070b7e3a-bb66-47e0-8196-7d030d54190d_ActionId",
"value": "92cc79fd-e712-4c0e-95fe-60041913a804"
},
{
"name": "MSIP_Label_070b7e3a-bb66-47e0-8196-7d030d54190d_ContentBits",
"value": "15"
}
]
}
]
}

위 예시에서 레이블 ID 070b7e3a-bb66-47e0-8196-7d030d54190d에 매핑되는 보호 템플릿 ID는 d8565050-8c6e-477e-9018-6fdf53b1968b입니다.

6. 역방향 마이그레이션의 한계

  • API 호출 증가: 테넌트가 소유한 레이블이 많을수록 각 레이블에 대해 evaluateApplication API를 호출해야 하므로, API 호출 횟수가 레이블 수만큼 증가합니다.